home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (DO) / A+ Disk Magazine Volume 1, No. 1 (1984)(Ziff-Davis).zip / A+ Disk Magazine Volume 1, No. 1 (1984)(Ziff-Davis).do / LOANS.bas < prev    next >
BASIC Source File  |  1996-12-24  |  18KB  |  480 lines

  1. 1  HOME : VTAB 8: HTAB 12: PRINT "A+ DISK MAGAZINE"
  2. 2  VTAB 10: HTAB 16: PRINT "PRESENTS"
  3. 3  VTAB 12: HTAB 13: INVERSE : PRINT "LOAN ANALYZER": NORMAL 
  4. 4  FOR I = 1 TO 500: NEXT I
  5. 5  VTAB 15: HTAB 12: PRINT "BY ZYNCON CORP."
  6. 7  VTAB 17: HTAB 6: PRINT "PROGRAMMED BY JASON WINSHELL"
  7. 8  VTAB 23: HTAB 22: PRINT "(C)COPYRIGHT 1983"
  8. 9  FOR I = 1 TO 4000: NEXT I
  9. 10  DIM F(7,3),P$(7),PARSET(7),ER(7),TABLE(60,3),PTABLE(420,3)
  10. 20  RESTORE : POKE 34,0
  11. 30  DATA     9,30,10
  12. 40  DATA     11,30,10
  13. 50  DATA     13,32,6
  14. 60  DATA      15,28,5
  15. 70  DATA    17,30,1
  16. 80  DATA    19,30,10
  17. 90 FALSE = 0:TRUE = 1
  18. 100  FOR I = 1 TO 6: READ F(I,1),F(I,2),F(I,3): NEXT I
  19. 110  HOME 
  20. 120  GOSUB 30070
  21. 130  GOSUB 31000
  22. 1000  REM   *** MAIN CONTROL ****
  23. 1010  GOSUB 3000
  24. 1020  GOSUB 9000
  25. 1030  GOSUB 8000
  26. 1040  GOSUB 2000
  27. 1050  GOSUB 4000
  28. 1060  GOSUB 7000
  29. 1070  VTAB 22: HTAB 9
  30. 1080  PRINT "<C> , <R>, <Q>, OR <CR>";
  31. 1090  GET T$
  32. 1100 T$ =  CHR$( ASC( LEFT$(T$,1)) -( ASC( LEFT$(T$,1)) > = 97) *32)
  33. 1110  IF T$ < > CHR$(13)  AND T$ < >"C"  AND T$ < >"R"  AND T$ < >"Q"  THEN 1090
  34. 1120  HTAB 1: CALL  -958
  35. 1130  IF T$ =  CHR$(13)  THEN 1050
  36. 1140  IF T$ = "R"  THEN 1010
  37. 1150  IF T$ = "Q"  THEN  HOME : END 
  38. 1160  IF GOOD = FALSE  OR MISS = 0  THEN 1070
  39. 1170  GOSUB 11000: REM    CALCULATE
  40. 1180  GOSUB 2000
  41. 1190 CNS = 0
  42. 1200  VTAB 23: HTAB 1: PRINT "DETAILED PAYBACK SCHEDULE (Y/N) ? ";
  43. 1210  GET T$
  44. 1220 T$ =  CHR$( ASC( LEFT$(T$,1)) -( ASC( LEFT$(T$,1)) > = 97) *32)
  45. 1230  IF T$ < >"Y"  AND T$ < >"N"  THEN 1210
  46. 1240  IF T$ = "N"  THEN  HTAB 1: CALL  -958: GOTO 1070
  47. 1250  IF N/PFQ < = 60  THEN 1280
  48. 1260  VTAB 23: HTAB 1: PRINT "TOO MANY PERIODS, ... HIT A KEY ";
  49. 1270  GET T$: VTAB 23: HTAB 1: CALL  -958: GOTO 1070
  50. 1280  IF PFQ = 1  THEN 1310
  51. 1290  IF N < = 60  THEN 1310
  52. 1300 CNS = 1
  53. 1310  IF TYPE$ = "M"  THEN  GOSUB 3040: GOTO 1330
  54. 1320  GOSUB 3080
  55. 1330  GOSUB 3120
  56. 1340  GOSUB 19000
  57. 1350  GOSUB 3000
  58. 1360  GOSUB 9060
  59. 1370  GOSUB 2000
  60. 1380  GOTO 1070
  61. 1390  END 
  62. 2000  VTAB F(1,1): HTAB 1
  63. 2010  PRINT "(1) AMOUNT TO BORROW:      $ ";:F1$ = "#######":F2$ = "##":V =  VAL(P$(1)): GOSUB 29000: PRINT O1$;:P$(1) = O1$
  64. 2020  VTAB F(2,1): HTAB 1
  65. 2030  PRINT "    FINAL BALLOON PAYMENT: $ ";:F1$ = "#######":F2$ = "##":V =  VAL(P$(2)): GOSUB 29000: PRINT O1$;:P$(2) = O1$
  66. 2040  VTAB F(3,1): HTAB 1
  67. 2050  PRINT "(2) ANNUAL INTEREST RATE:      ";:F1$ = "##":F2$ = "###":V =  VAL(P$(3)): GOSUB 29000: PRINT O1$;: PRINT " %";:P$(3) = O1$
  68. 2060  VTAB F(4,1): HTAB 1
  69. 2070  PRINT "(3) DURATION OF BORROWING: ";P$(4);: HTAB 34: PRINT " YY,MM ";
  70. 2080  VTAB F(5,1): HTAB 1
  71. 2090  PRINT "    PAYMENT FREQUENCY:       ";P$(5);" (M,Q,Y)";
  72. 2100  VTAB F(6,1): HTAB 1
  73. 2110  PRINT "(4) PAYMENT PER PERIOD:    $ ";:F1$ = "#######":F2$ = "##":V =  VAL(P$(6)): GOSUB 29000: PRINT O1$;:P$(6) = O1$
  74. 2500  RETURN 
  75. 3000  HOME 
  76. 3010  HTAB 5: PRINT "LOAN ANALYZER -- SPECIFICATION"
  77. 3020  HTAB 5: PRINT "=============================="
  78. 3030  RETURN 
  79. 3040  HOME 
  80. 3050  HTAB 8: PRINT "MORTGAGE PAYBACK SCHEDULE"
  81. 3060  HTAB 8: PRINT "========================="
  82. 3070  RETURN 
  83. 3080  HOME 
  84. 3090  HTAB 6: PRINT "INSTALLMENT PAYBACK SCHEDULE"
  85. 3100  HTAB 6: PRINT "============================"
  86. 3110  RETURN 
  87. 3120  VTAB 4: HTAB 1
  88. 3130  PRINT "AMT  : $";:F1$ = "#######":F2$ = "##":V = A: GOSUB 29000: PRINT O1$
  89. 3140  PRINT "BLN  : $";:F1$ = "#######":F2$ = "##":V = B: GOSUB 29000: PRINT O1$
  90. 3150  PRINT "PMNT : $";:F1$ = "#######":F2$ = "##":V = P: GOSUB 29000: PRINT O1$
  91. 3160  VTAB 4: HTAB 26
  92. 3170  PRINT "RATE: ";:F1$ = "##":F2$ = "###":V = ANNT: GOSUB 29000: PRINT O1$;" %";
  93. 3180  VTAB 5: HTAB 26
  94. 3190  PRINT "DUR : ";P$(4);
  95. 3200  VTAB 6: HTAB 26
  96. 3210  PRINT "FREQ: ";
  97. 3220  IF PFQ$ = "M"  THEN  PRINT "MONTHLY";: GOTO 3250
  98. 3230  IF PFQ$ = "Q"  THEN  PRINT "QUARTERLY";: GOTO 3250
  99. 3240  PRINT "YEARLY";
  100. 3250  VTAB 9: HTAB 1
  101. 3260  PRINT "   |  CUMUL.   |    CUMUL.  |  PAY-OFF"
  102. 3262  IF CNS = 1  THEN  PRINT " Y ";: GOTO 3270
  103. 3265  PRINT " ";PFQ$;" ";
  104. 3270  PRINT "| PRINCIPAL |   INTEREST |  AMOUNT"
  105. 3280  PRINT "---------------------------------------"
  106. 3290  POKE 34,11: REM    WINDOW
  107. 3300  RETURN 
  108. 4000  REM   ** ENTRY ROUTINE
  109. 4010 PARLINE = 1
  110. 4020 TEMP$ = P$(PARLINE): GOSUB 5000
  111. 4030  IF F$ = ""  THEN 4050
  112. 4040 P$(PARLINE) = F$: GOTO 4070
  113. 4050  VTAB F(PARLINE,1): HTAB F(PARLINE,2)
  114. 4060  PRINT TEMP$;
  115. 4070  REM  
  116. 4080 PARLINE = PARLINE +1
  117. 4090  IF PARLINE = 7  THEN  RETURN 
  118. 4100  GOTO 4020
  119. 5000  REM   SCREEN EDIT SIMULATOR
  120. 5010 F$ = ""
  121. 5020 ROW = F(PARLINE,1):BC = F(PARLINE,2):FL = F(PARLINE,3)
  122. 5030 FP = BC
  123. 5040  VTAB ROW: HTAB FP
  124. 5050  REM   GOSUB 5240
  125. 5060  GET T$: IF T$ =  CHR$(13)  THEN 5220
  126. 5070  IF T$ = "/"  THEN FP = BC: HTAB FP: PRINT  SPC( FL);:TEMP$ = " ":P$(PARLINE) = " ": GOTO 5010
  127. 5080  IF  ASC(T$) = 8  THEN 5160
  128. 5090  IF (T$ <",")  OR (T$ >"z")  THEN 5060
  129. 5100  IF FP = BC +FL  THEN 5040
  130. 5110  PRINT T$;
  131. 5120 F$ = F$ +T$
  132. 5130  IF FP = BC  THEN  PRINT  SPC( FL);
  133. 5140 FP = FP +1
  134. 5150  GOTO 5040
  135. 5160  IF FP = BC  THEN 5040
  136. 5170  IF FP = BC +1  THEN F$ = "": PRINT " ";:FP = BC: GOTO 5040
  137. 5180  PRINT " ";
  138. 5190 FP = FP -1
  139. 5200 F$ =  LEFT$(F$,FP -BC)
  140. 5210  GOTO 5040
  141. 5220  PRINT " ";
  142. 5230  RETURN 
  143. 7000  REM   *** CHECK PARAMATERS ROUTINE
  144. 7010  FOR I = 1 TO 7:ER(I) = 0:PARSET(I) = 0: NEXT I
  145. 7020 GOOD = TRUE
  146. 7030 NUMPAR = 0
  147. 7040 A =  VAL(P$(1))
  148. 7050  IF A < = 0  OR A > = 1E +7  THEN GOOD = FALSE:ER(1) = 1: GOTO 7080
  149. 7060 PARSET(1) = 1
  150. 7070 NUMPAR = NUMPAR +1
  151. 7080 B =  VAL(P$(2)): IF B <0  OR B > = 1E +7  THEN B = 0
  152. 7090 ANNT =  VAL(P$(3))
  153. 7100  IF ANNT < = 0  OR ANNT > = 1E +7  THEN GOOD = FALSE:ER(3) = 1: GOTO 7130
  154. 7110 PARSET(3) = 1
  155. 7120 NUMPAR = NUMPAR +1
  156. 7130  GOSUB 7600
  157. 7140  IF  VAL(YY$) < > INT( VAL(YY$))  OR  VAL(MM$) < > INT( VAL(MM$))  THEN GOOD = FALSE:ER(4) = 1: GOTO 7200
  158. 7150 DUR =  VAL(YY$) + VAL(MM$)/12:N =  VAL(YY$) *12 + VAL(MM$)
  159. 7160  IF DUR < = 0  THEN GOOD = FALSE:ER(4) = 1: GOTO 7200
  160. 7170  GOSUB 30000
  161. 7180 PARSET(4) = 1
  162. 7190 NUMPAR = NUMPAR +1
  163. 7200 PFQ$ = P$(5)
  164. 7210 PFQ$ =  CHR$( ASC( LEFT$(PFQ$,1)) -( ASC( LEFT$(PFQ$,1)) > = 97) *32)
  165. 7220  IF PFQ$ < >"M"  AND PFQ$ < >"Q"  AND PFQ$ < >"Y"  THEN GOOD = FALSE:ER(5) = 1: GOTO 7280
  166. 7230  IF PFQ$ = "M"  THEN PFQ = 12: GOTO 7260
  167. 7240  IF PFQ$ = "Q"  THEN PFQ = 4: GOTO 7260
  168. 7250 PFQ = 1
  169. 7260 PARSET(5) = 1
  170. 7270 NUMPAR = NUMPAR +1
  171. 7275  IF (N <PFQ/12)  OR (N *PFQ/12) < > INT(N *PFQ/12)  THEN ER(4) = 1:PARSET(4) = 0
  172. 7280 P =  VAL(P$(6))
  173. 7290  IF P < = 0  OR P > = 1E +7  THEN GOOD = FALSE:ER(6) = 1: GOTO 7320
  174. 7300 PARSET(6) = 1
  175. 7310 NUMPAR = NUMPAR +1
  176. 7320  IF NUMPAR <4  THEN GOOD = FALSE:ER(7) = 1
  177. 7330  IF GOOD = TRUE  THEN ER$ = "PARAMETERS OK             ": GOTO 7420
  178. 7340 ER$ = "ERROR(S) IN PARAMETERS "
  179. 7350 TTER = 0
  180. 7360  FOR I = 1 TO 6
  181. 7370  IF ER(I) = 0  THEN 7400
  182. 7380 TTER = TTER +1
  183. 7381  IF I = 3  THEN ER$ = ER$ +"/" +"2": GOTO 7400
  184. 7382  IF I = 4  THEN ER$ = ER$ +"/" +"3": GOTO 7400
  185. 7383  IF I = 6  THEN ER$ = ER$ +"/" +"4": GOTO 7400
  186. 7384  IF I = 5  THEN ER$ = ER$ +"/" +"FREQ": GOTO 7400
  187. 7385 ER$ = ER$ +"/" +"1"
  188. 7400  NEXT I
  189. 7410  IF TTER = 1  AND ER(5) < >1  THEN GOOD = TRUE: GOTO 7330
  190. 7420  VTAB 24: HTAB 1
  191. 7430  PRINT  SPC( 39);
  192. 7440  VTAB 24: HTAB 1
  193. 7450  PRINT ER$;
  194. 7460 A =  FN CN(A)
  195. 7470 DUR =  FN CN(DUR)
  196. 7480 P =  FN CN(P)
  197. 7490  IF GOOD = FALSE  THEN 7580
  198. 7500 MISS = 0
  199. 7510  FOR I = 1 TO 6
  200. 7520  IF I = 2  THEN 7540
  201. 7530  IF PARSET(I) = 0  THEN MISS = I: GOTO 7550
  202. 7540  NEXT I
  203. 7550  REM   ** MISS IS THE # OF MISSING PARM **
  204. 7560  IF MISS < >4  THEN N = N/(12/PFQ)
  205. 7570 R = ANNT/PFQ/100
  206. 7580  IF GOOD = TRUE  THEN  GOSUB 2000
  207. 7590  RETURN 
  208. 7600  REM   ** CHECK ON YY,MM FORMAT
  209. 7610 CMPO = 0: FOR I = 1 TO  LEN(P$(4))
  210. 7620  IF  MID$ (P$(4),I,1) = ","  THEN CMPO = I: GOTO 7640
  211. 7630  NEXT I
  212. 7640  IF CMPO = 0  THEN YY$ = P$(4):MM$ = "": GOTO 7690
  213. 7650  IF CMPO = 1  THEN YY$ = "":MM$ =  MID$ (P$(4),2, LEN(P$(4)) -1): GOTO 7690
  214. 7660 YY$ =  MID$ (P$(4),1,CMPO -1)
  215. 7670  IF CMPO = 4  THEN MM$ = "": GOTO 7690
  216. 7680 MM$ =  MID$ (P$(4),CMPO +1, LEN(P$(4)) -CMPO)
  217. 7690  RETURN 
  218. 8000  REM   **** CLEAR PARAMETERS
  219. 8010 P$(1) = "      0.00"
  220. 8020 P$(2) = "      0.00"
  221. 8030 P$(3) = " 0.000"
  222. 8040 P$(4) = "00,00"
  223. 8050 P$(5) = "M"
  224. 8060 P$(6) = "      0.00"
  225. 8070  RETURN 
  226. 9000  VTAB 5: HTAB 1: PRINT "INSTALLMENT LOAN OR MORTGAGE :   (I/M)";: HTAB 32
  227. 9010  GET TYPE$: IF TYPE$ = ""  THEN 9010
  228. 9020 TYPE$ =  CHR$( ASC( LEFT$(TYPE$,1)) -( ASC( LEFT$(TYPE$,1)) > = 97) *32)
  229. 9030  IF (TYPE$ < >"I")  AND (TYPE$ < >"M")  THEN 9010
  230. 9040  PRINT TYPE$;
  231. 9060  VTAB 5: HTAB 1: CALL  -958: PRINT "INSTALLMENT LOAN OR MORTGAGE : ";TYPE$;
  232. 9070  VTAB 7: HTAB 1: FOR I = 1 TO 40: PRINT  CHR$(95);: NEXT I
  233. 9080  RETURN 
  234. 11000  REM   *** CALCULATE ***
  235. 11010  IF TYPE$ = "M"  THEN 11150
  236. 11020  ON MISS GOTO 11030,11310,11060,11090,11310,11120
  237. 11030  GOSUB 30350: REM    CALC A
  238. 11040 A =  FN CN(A)
  239. 11050  GOTO 11310
  240. 11060  GOSUB 30390: REM    CALC R
  241. 11070 ANNT = 100 *R *PFQ
  242. 11080  GOTO 11310
  243. 11090  GOSUB 30440: REM    CALC N
  244. 11100 N =  FN CN(N)
  245. 11110 DUR = N/PFQ: REM   DUR =  FN CN(DUR)
  246. 11120  GOSUB 30480: REM    CALC P
  247. 11130 P =  FN CN(P)
  248. 11140  GOTO 11310
  249. 11150  REM   *** MORTGAGE ***
  250. 11160  ON MISS GOTO 11170,11310,11200,11230,11310,11280
  251. 11170  GOSUB 30160: REM   CALC A
  252. 11180 A =  FN CN(A)
  253. 11190  GOTO 11310
  254. 11200  GOSUB 30190: REM   NEWTON R
  255. 11210 ANNT = 100 *R *PFQ
  256. 11220  GOTO 11310
  257. 11230  GOSUB 30250: REM   CALC N
  258. 11240 N =  FN CN(N)
  259. 11250 DUR = N
  260. 11260 DUR = DUR/PFQ:DUR =  FN CN(DUR)
  261. 11270  GOTO 11310
  262. 11280  GOSUB 30290: REM     CALC P
  263. 11290 P =  FN CN(P)
  264. 11300  REM   *** POST PROCESS CALCS **
  265. 11310  REM      *** POST PROCESS CALCS **
  266. 11320  IF MISS = 1  THEN P$(1) =  STR$(A)
  267. 11330  IF MISS = 3  THEN P$(3) =  STR$(ANNT)
  268. 11340  IF MISS = 4  THEN  GOSUB 30000
  269. 11350  IF MISS = 5  THEN P$(5) = PFQ$
  270. 11360  IF MISS = 6  THEN P$(6) =  STR$(P)
  271. 11370 PARSET(MISS) = 1:MISS = 0
  272. 11380  RETURN 
  273. 16000  REM   ** FILL IN TABLE **
  274. 16010 CP = 0
  275. 16020 CI = 0
  276. 16030 A1 = A
  277. 16040 LM = N/PFQ
  278. 16050 T1 = 0
  279. 16060  IF TYPE$ = "M"  THEN 16100
  280. 16070 T1 = N *(N +1)/2
  281. 16080 LN = 0
  282. 16090  IF N/T1 *(N *P -A) >P  THEN LN = 1
  283. 16100  FOR J = 1 TO N
  284. 16110  IF TYPE$ = "M"  THEN KI = R *A1: GOTO 16140
  285. 16120  IF LN = 0  THEN KI = (N *P -A +B) *(N +1 -J)/T1: GOTO 16140
  286. 16130 KI = (N *P -A +B)/N
  287. 16140 KP = P -KI
  288. 16150 CP = CP +KP
  289. 16160 CI = CI +KI
  290. 16170 KP =  FN CN(KP)
  291. 16180 KI =  FN CN(KI)
  292. 16190 CP =  FN CN(CP)
  293. 16200 CI =  FN CN(CI)
  294. 16210 PO = A +B -CP
  295. 16220 PO =  FN CN(PO)
  296. 16230  IF TYPE$ = "M"  THEN A1 = A1 -KP
  297. 16240  IF CNS < >1  THEN 16300
  298. 16250  IF J/PFQ < > INT(J/PFQ)  AND J/PFQ <LM  THEN 16330
  299. 16260 TABLE(J/PFQ,1) = CP
  300. 16270 TABLE(J/PFQ,2) = CI
  301. 16280 TABLE(J/PFQ,3) = PO
  302. 16290  GOTO 16330
  303. 16300 TABLE(J,1) = CP
  304. 16310 TABLE(J,2) = CI
  305. 16320 TABLE(J,3) = PO
  306. 16330 PTABLE(J,1) = CP
  307. 16332 PTABLE(J,2) = CI
  308. 16334 PTABLE(J,3) = PO
  309. 16340  NEXT J
  310. 16350  IF CNS = 0  THEN TSIZE = N: GOTO 16380
  311. 16360  IF LM < > INT(LM)  THEN TSIZE =  INT(LM +1): GOTO 16380
  312. 16370 TSIZE = LM
  313. 16380  IF TSIZE < > INT(TSIZE)  THEN TSIZE =  INT(TSIZE +1)
  314. 16390 TABLE(TSIZE,1) = A -B
  315. 16400 TABLE(TSIZE,2) = P *N -A +B
  316. 16410 TABLE(TSIZE,3) = B
  317. 16420 PSIZE = N
  318. 16430  IF PSIZE < > INT(PSIZE)  THEN PSIZE =  INT(PSIZE +1)
  319. 16440 PTABLE(PSIZE,1) = A -B
  320. 16450 PTABLE(PSIZE,2) = P *N -A +B
  321. 16460 PTABLE(PSIZE,3) = B
  322. 16470  RETURN 
  323. 19000  REM   ** DETAIL REPORT ***
  324. 19010  GOSUB 16000
  325. 19020  IF CNS = 1  THEN  VTAB 7: HTAB 1: PRINT "ANNUAL CONSOLIDATION";
  326. 19030  IF TYPE$ = "I"  THEN  IF LN = 1  THEN  VTAB 7: HTAB 25: PRINT "(LINEAR DECLINE)";
  327. 19040  HOME : FOR I = 1 TO TSIZE
  328. 19050 F1$ = "###":F2$ = "":V = I: GOSUB 29000: PRINT O1$;"|";
  329. 19060 F1$ = "#######":F2$ = "##":V = TABLE(I,1): GOSUB 29000: PRINT O1$;" | ";
  330. 19070 F1$ = "#######":F2$ = "##":V = TABLE(I,2): GOSUB 29000: PRINT O1$;" |";
  331. 19080 F1$ = "#######":F2$ = "##":V = TABLE(I,3): GOSUB 29000: PRINT O1$;
  332. 19090  IF (I/12 < > INT(I/12))  AND (I < >TSIZE)  THEN  PRINT : GOTO 19220
  333. 19100  VTAB 24: HTAB 10: PRINT "<N>, <P>, <R>, <E>";
  334. 19110  VTAB 24: HTAB 28: GET T$
  335. 19120 T$ =  CHR$( ASC( LEFT$(T$,1)) -( ASC( LEFT$(T$,1)) > = 97) *32)
  336. 19130  IF T$ < >"N"  AND T$ < >"P"  AND T$ < >"R"  AND T$ < >"E"  THEN 19110
  337. 19140  IF T$ < >"N"  THEN 19170
  338. 19150  IF I = TSIZE  THEN 19110
  339. 19160  HOME : GOTO 19220
  340. 19170  IF T$ < >"P"  THEN 19240
  341. 19180  IF I < = 12  THEN  GOTO 19110
  342. 19190  IF I/12 < > INT(I/12)  THEN I =  INT(I/12) *12 -12: GOTO 19210
  343. 19200 I = I -24
  344. 19210  HOME : GOTO 19220
  345. 19220  IF I = TSIZE  THEN 19050
  346. 19230  NEXT I
  347. 19240  IF T$ < >"R"  THEN 19270
  348. 19245  IF SN% = 0  THEN 19110
  349. 19250  VTAB 3: HTAB 1: PRINT  CHR$(13); CHR$(4);"PR# ";SN%: PRINT  CHR$(9);"80N";: GOSUB 25000: PRINT  CHR$(4);"PR# 0"
  350. 19260  GOTO 19110
  351. 19270  POKE 34,0: RETURN 
  352. 20000  REM   ** TITLES FOR PRINTOUT **
  353. 20005  PRINT  CHR$(12);
  354. 20010  PRINT  SPC( 9);"L O A N  A N A L Y Z E R --  INSTALLMENT LOAN PAYBACK SCHEDULE"
  355. 20015  PRINT  SPC( 9);"=============================================================="
  356. 20020  PRINT : PRINT : RETURN 
  357. 20025  PRINT  CHR$(12);
  358. 20030  PRINT  SPC( 12);"L O A N  A N A L Y Z E R --  MORTGAGE PAYBACK SCHEDULE"
  359. 20035  PRINT  SPC( 12);"======================================================"
  360. 20040  PRINT : PRINT : RETURN 
  361. 20045  PRINT  SPC( 17);"AMOUNT: $ ";:F1$ = "#######":F2$ = "##":V = A: GOSUB 29000: PRINT O1$;
  362. 20050  PRINT  SPC( 9);"ANNUAL INTEREST RATE: ";:F1$ = "##":F2$ = "###":V = ANNT: GOSUB 29000: PRINT O1$;" %"
  363. 20055  PRINT  SPC( 2);"FINAL BALLOON PAYMENT: $ ";:F1$ = "#######":F2$ = "##":V = B: GOSUB 29000: PRINT O1$;
  364. 20060  PRINT  SPC( 8);"DURATION OF BORROWING: ";: PRINT P$(4);" YY,MM"
  365. 20065  PRINT  SPC( 5);"PAYMENT PER PERIOD: $ ";:F1$ = "#######":F2$ = "##":V = P: GOSUB 29000: PRINT O1$;
  366. 20070  PRINT  SPC( 12);"PAYMENT FREQUENCY: ";
  367. 20075  IF PFQ$ = "Y"  THEN  PRINT "YEARLY": GOTO 20090
  368. 20080  IF PFQ$ = "Q"  THEN  PRINT "QUARTERLY": GOTO 20090
  369. 20085  PRINT "MONTHLY"
  370. 20090  IF TYPE$ = "I"  THEN  IF LN = 1  THEN  PRINT  SPC( 33);"(Linear Decline)": GOTO 20100
  371. 20095  PRINT 
  372. 20100  PRINT 
  373. 20105  RETURN 
  374. 20170  REM   ** COLUMN HEADINGS **
  375. 20180  PRINT  SPC( 22);"   |    CUMUL.   |    CUMUL.   |   PAY-OFF   "
  376. 20190  IF PFQ$ = "Y"  THEN T$ = "YEAR    ": GOTO 20230
  377. 20200  IF PFQ$ = "Q"  THEN T$ = "QUARTER ": GOTO 20230
  378. 20210 T$ = "MONTH   "
  379. 20230  PRINT  SPC( 17);T$;
  380. 20240  PRINT "|  PRINCIPAL  |   INTEREST  |   AMOUNT"
  381. 20250  PRINT  SPC( 16);"----------------------------------------------------"
  382. 20260  RETURN 
  383. 25000  REM   ** PRINTOUT DETAIL **
  384. 25010  IF TYPE$ = "I"  THEN  GOSUB 20000: GOTO 25030
  385. 25020  GOSUB 20025
  386. 25030  GOSUB 20045
  387. 25040  GOSUB 20170
  388. 25100  FOR K = 1 TO PSIZE
  389. 25110  PRINT  SPC( 18);:F1$ = "####":F2$ = "":V = K: GOSUB 29000: PRINT O1$;
  390. 25120  PRINT  SPC( 3);"| ";
  391. 25150 F1$ = "#######":F2$ = "##":V = PTABLE(K,1): GOSUB 29000: PRINT O1$; SPC( 2);"| ";
  392. 25190 F1$ = "#######":F2$ = "##":V = PTABLE(K,2): GOSUB 29000: PRINT O1$; SPC( 2);"| ";
  393. 25230 F1$ = "#######":F2$ = "##":V = PTABLE(K,3): GOSUB 29000: PRINT O1$
  394. 25240  IF K/48 < > INT(K/48)  THEN 25260
  395. 25245  IF K = N  THEN 25400
  396. 25250  PRINT  CHR$(12);: PRINT : PRINT : PRINT : GOSUB 20170
  397. 25260  REM  
  398. 25400  NEXT K
  399. 25999  RETURN 
  400. 29000  REM   ***** PRINT USING ####,####,VAL
  401. 29010 F3$ = "          ":F4$ = "000000000"
  402. 29020  IF  LEN( STR$( INT(V))) > =  LEN(F1$)  THEN O1$ =  STR$( INT(V)): GOTO 29040
  403. 29030 O1$ =  LEFT$(F3$, LEN(F1$) - LEN( STR$( INT(V)))) + STR$( INT(V))
  404. 29040 F1$ =  STR$(V)
  405. 29050  FOR VI = 1 TO  LEN(F1$)
  406. 29060  IF  MID$ (F1$,VI,1) = "."  THEN 29100
  407. 29070  NEXT VI
  408. 29080  IF F2$ = ""  THEN O2$ = "": GOTO 29150
  409. 29090 F1$ = "0": GOTO 29110
  410. 29100 F1$ =  RIGHT$(F1$, LEN(F1$) -VI)
  411. 29110  IF F2$ = ""  THEN O2$ = F1$: GOTO 29150
  412. 29120  IF  LEN(F1$) > =  LEN(F2$)  THEN O2$ =  LEFT$(F1$, LEN(F2$)): GOTO 29140
  413. 29130 O2$ = F1$ + LEFT$(F4$, LEN(F2$) - LEN(F1$))
  414. 29140 O2$ = "." +O2$
  415. 29150 O1$ = O1$ +O2$
  416. 29160  RETURN 
  417. 30000  REM   *** CONVERT DUR BACK TO YY,MM
  418. 30010 YY$ =  STR$( INT(DUR))
  419. 30020 MM$ =  STR$( INT((DUR - INT(DUR)) *12 +0.5))
  420. 30030  IF  LEN(YY$) <2  THEN YY$ = "0" +YY$
  421. 30040  IF  LEN(MM$) <2  THEN MM$ = "0" +MM$
  422. 30050 P$(4) = YY$ +"," +MM$
  423. 30060  RETURN 
  424. 30070  REM   *** FUNCTION ROUTINES FOR CALCULATIONS
  425. 30080  DEF  FN CN(X) =  INT(100 *X +0.5)/100
  426. 30090  REM   ** NEWTON FUNCTIONS
  427. 30100  DEF  FN F(S) = A *S ^(N +1) -(A +P) *S ^N -B *S +B +P
  428. 30110  DEF  FN G(S) = A *(N +1) *S ^N -(A +P) *N *S ^(N -1) -B
  429. 30120  RETURN : REM   NO MORE TRUE FUNCTIONS
  430. 30130  REM  
  431. 30140  REM   *** MORTAGE CALCULATIONS **
  432. 30150  REM   
  433. 30160  REM    FNMA(B,N,P,R)
  434. 30170 A = (P +(B *R *(1 +R) ^N)/((1 +R) ^N -1) -R *B)/(R *(1 +R) ^N/((1 +R) ^N -1))
  435. 30180  RETURN 
  436. 30190  REM   *** NEWTON ROUTINE ***
  437. 30200 S = 1.1
  438. 30210  IF  FN F(S) < = 0.1  THEN R = S -1: RETURN 
  439. 30220 S = S - FN F(S)/ FN G(S)
  440. 30230  GOTO 30210
  441. 30240  REM  
  442. 30250  REM   FNMN(A,B,P,R)
  443. 30260 N =  LOG(R *(A -B)/(P -R *B -R *(A -B)) +1)/ LOG(1 +R)
  444. 30270  RETURN 
  445. 30280  REM  
  446. 30290  REM   FNMP(A,B,N,R)
  447. 30300 P = (A -B) *R *(1 +R) ^N/((1 +R) ^N -1) +R *B
  448. 30310  RETURN 
  449. 30320  REM  
  450. 30330  REM   ** CALCULATIONS FOR INSTALL 
  451. 30340  REM  
  452. 30350  REM   FNIA(B,N,P,R)
  453. 30360 A = (P *N +B)/(1 +R *N)
  454. 30370  RETURN 
  455. 30380  REM  
  456. 30390  REM    FNIR(A,B,N,P)
  457. 30400 R = (P *N +B -A)/(N *A)
  458. 30410  RETURN 
  459. 30420  REM  
  460. 30430  REM   FNIN(A,B,P,R)
  461. 30440 N = (A -B)/(P -R *A)
  462. 30450  RETURN 
  463. 30460  REM  
  464. 30470  REM    FNIP(A,B,N,R)
  465. 30480 P = (A -B +R *N *A)/N
  466. 30490  RETURN 
  467. 31000  REM   ** PRINTER INIT **
  468. 31100  HOME 
  469. 31120  PRINT "DO YOU HAVE A PRINTER (Y/N) ?";
  470. 31130  GET T$
  471. 31140 T$ =  CHR$( ASC( LEFT$(T$,1)) -( ASC( LEFT$(T$,1)) > = 97) *32)
  472. 31150  IF T$ < >"N"  AND T$ < >"Y"  THEN 31130
  473. 31155  PRINT T$
  474. 31160  IF T$ = "N"  THEN SN% = 0: RETURN 
  475. 31170  PRINT "SLOT NUMBER (1-6) ? ";
  476. 31180  GET T$
  477. 31190 T$ =  CHR$( ASC( LEFT$(T$,1)) -( ASC( LEFT$(T$,1)) > = 97) *32)
  478. 31200  IF  VAL(T$) <1  OR  VAL(T$) >6  THEN 31180
  479. 31205  PRINT T$
  480. 31210 SN% =  VAL(T$): RETURN